using System;
using Gtk;
using MySql.Data.MySqlClient;


public partial class MainWindow : Gtk.Window
{
	public MySqlConnection mySqlConnection;
	public MySqlCommand mySqlCommand;
	public MySqlDataReader mySqlDataReader;
	
	
	public MainWindow () : base(Gtk.WindowType.Toplevel)
	{
		Build ();
		consultarAccion.Activated += delegate 
		{
			Console.WriteLine("Vamos a acceder a la base de datos");
			//**** Dtos de acceso a la base de datos
			string mySqlConnString = "server = localhost; database = dbprueba; user=root; password=sistemas";
			//**** Objeto que crea la conexión a la base de datos
			mySqlConnection = new MySqlConnection(mySqlConnString);
			//**** Objeto que admite las consultas SQL
			mySqlCommand = mySqlConnection.CreateCommand();
			//**** String de consulta SQL
			mySqlCommand.CommandText = "SELECT * FROM articulo;";
			//**** Abrimos la conexión
			mySqlConnection.Open();
			//**** Creamos un lector de datos para que nos recoja el conjunto de datos distribuidos en un array 3D
			MySqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader();
			
			//**** Creamos tantas columnas como tenga la consulta:
			for(int i=0; i<mySqlDataReader.FieldCount; i++)
			{
				treeView.AppendColumn(mySqlDataReader.GetName(i), new CellRendererText(), "text", i);
			}
			
			//**** Creamos un array de tipos "string" de la longitud del numero de columnas del mySqlReader
			Type[] types = new Type[mySqlDataReader.FieldCount];
			for(int i=0; i<types.Length; i++)
			{
				types[i]=typeof(string);
			}
			
			//**** Creamos un objeto ListStore pasandole como parametro el array de tipos
			ListStore listStore = new ListStore(types);
			
			//**** Modelamos el treeView con el ListStore de que disponemos
			treeView.Model = listStore;
			
			//	Creamos un array de objetos donde guardaremos los valores de cada registro
			object[] values = new object[mySqlDataReader.FieldCount];
			//	Creamos un array de cadenas donde guardaremos los valores de cada columna
			string[] strings = new string[values.Length];
			
			//**** Mientras vayamos leyendo y hayan registros(tuplas) en la consulta...
			while(mySqlDataReader.Read())
			{
				//****	Obtenemos los valores del dataReader
				mySqlDataReader.GetValues(values);
				/*
				for(int i=0;i<values.Length; i++)
				{
					strings[i] = values[i].ToString();
				}
				*/
				//**** Una alternativa para guardar datos null
				for(int i=0;i<values.Length; i++)
				{
					if(mySqlDataReader.IsDBNull(i))
					{
						strings[i] = "null";
					}
					else
					{
						strings[i] = values[i].ToString();
					}
				}
				//**** Añadimos los valores del registro al listStore
				listStore.AppendValues(strings);
			}
			//**** Cerramos DataReader y Conexión
			mySqlDataReader.Close();
			mySqlConnection.Close();			
		};
		
	}
	protected void OnDeleteEvent (object sender, DeleteEventArgs a)
	{
		Application.Quit ();
		a.RetVal = true;
	}
}

